package com.sulent.frame.mp.utils;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

/**
 * @ClassName CodeGenerator
 * @Description: TODO
 * @Author Submerge.
 * @Since 2022/11/2 17:54
 * @Version 1.0
 */
public class CodeGenerator {


    /**
     * 示例方法
     *
     * @param args
     */
    public static void sampleCode(String[] args) {

        FastAutoGenerator.create("jdbc:mysql://172.16.0.16:13306/p_wjw_test_gen", "dgd-uadp", "dgd-uadp@2020")
                //全局配置
                .globalConfig(builder -> {
                    builder.author("Submerge.") //作者
                            .enableSwagger()    //开启Swagger模式
                            .outputDir("D:\\code\\ai-manage-center\\manage-center-server\\src\\main\\java") //输出目录
                            .fileOverride(); //覆盖原文件
                })//包配置
                .packageConfig(builder -> {
                    builder.parent("com.digitalgd.ds.ai.manage")   //设置父包名
                            //.moduleName("")  //设置父包模块名
                            .entity("entity")
                            .mapper("dao")
                            .serviceImpl("service.impl")
                            .service("service")
                            .controller("rest")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:\\code\\ai-manage-center\\manage-center-server\\src\\main\\resources\\mapper"));
                })//策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("mc_dedicated_resource", "mc_preset_mirror_image", "mc_custom_mirror_image") //设置需要生成的表名
                            .addTablePrefix("mc_"); //设置过滤表前缀
                })//
                .templateEngine(new VelocityTemplateEngine())   // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }

    /**
     * 生成代码
     *
     * @param properties  全局属性
     * @param outputDir   输出目录
     * @param parentDir   父目录，从系统盘符开始
     * @param mapperDir   mapper文件生成的目录，从系统盘符开始
     * @param tablePrefix 表前缀
     * @param tables      表，可以是多个
     */
    public static void generateCode(CodeGeneratorProperties properties, String outputDir, String parentDir, String mapperDir, String tablePrefix, String... tables) {
        FastAutoGenerator.create(properties.getUrl(), properties.getUsername(), properties.getPassword())
                //全局配置
                .globalConfig(builder -> {
                    builder.author(properties.getAuthor()) //作者
                            .enableSwagger()    //开启Swagger模式
                            .outputDir(outputDir) //输出目录
                            .fileOverride(); //覆盖原文件
                })//包配置
                .packageConfig(builder -> {
                    builder.parent(parentDir)   //设置父包名
                            //.moduleName("")  //设置父包模块名
                            .entity("entity")
                            .mapper("dao")
                            .serviceImpl("service.impl")
                            .service("service")
                            .controller("rest")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperDir));
                })//策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(tables) //设置需要生成的表名
                            .addTablePrefix(tablePrefix); //设置过滤表前缀
                })//
                .templateEngine(new VelocityTemplateEngine())   // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();


    }
}
